package org.japo.java.gui.samples;

import java.awt.Color;
import java.awt.Font;
import java.awt.Image;
import java.io.BufferedReader;
import java.io.FileReader;
import java.net.URL;
import java.util.Arrays;
import java.util.StringTokenizer;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

class IGU extends JFrame {

    JLabel lblUser;
    JLabel lblPass;
    JTextField txfUser;
    JPasswordField psfPass;
    JButton btnAceptar;
    JButton btnCancelar;
    PanelFondo pnlPrincipal;
    String FICHERO = "password.txt";

    public IGU() {
        // Fuente de las etiquetas
        Font fntEtiqueta = new Font("Calibri", Font.BOLD + Font.ITALIC, 14);

        // Gestor de eventos de accion
        GEA gea = new GEA(this);

        // Gestor de eventos de ratón
        GER ger = new GER(this);

        // Gestor de eventos de foco
        GEF gef = new GEF(this);

        // Gestor de eventos de teclado
        GET get = new GET(this);

        // Etiqueta de Usuario
        lblUser = new JLabel();
        lblUser.setFont(fntEtiqueta);
        lblUser.setText("Usuario");
        lblUser.setSize(80, 30);
        lblUser.setLocation(35, 35);
        lblUser.setHorizontalAlignment(JLabel.RIGHT);

        // Etiqueta de Password
        lblPass = new JLabel();
        lblPass.setFont(fntEtiqueta);
        lblPass.setText("Contraseña");
        lblPass.setSize(80, 30);
        lblPass.setLocation(35, 85);
        lblPass.setHorizontalAlignment(JLabel.RIGHT);

        // Campo de texto de usuario
        txfUser = new JTextField();
        txfUser.setText("");
        txfUser.setSize(120, 30);
        txfUser.setLocation(130, 35);
        txfUser.addActionListener(gea);
        txfUser.addFocusListener(gef);

        // Campo de texto de password
        psfPass = new JPasswordField();
        psfPass.setText("");
        psfPass.setSize(120, 30);
        psfPass.setLocation(130, 85);
        psfPass.addActionListener(gea);
        psfPass.addFocusListener(gef);

        // Botón de aceptar
        btnAceptar = new JButton();
        btnAceptar.setText("Aceptar");
        btnAceptar.setSize(100, 30);
        btnAceptar.setLocation(30, 145);
        btnAceptar.addMouseListener(ger);
        btnAceptar.addKeyListener(get);

        // Botón de cancelar
        btnCancelar = new JButton();
        btnCancelar.setText("Cancelar");
        btnCancelar.setSize(100, 30);
        btnCancelar.setLocation(150, 145);
        btnCancelar.addMouseListener(ger);
        btnCancelar.addKeyListener(get);

        // Imagen de fondo
        URL urlImagen = getClass().getResource("fondo.jpg");
        Image i = new ImageIcon(urlImagen).getImage();

        // Panel principal
        pnlPrincipal = new PanelFondo(i);
        pnlPrincipal.setLayout(null);
        pnlPrincipal.add(lblUser);
        pnlPrincipal.add(lblPass);
        pnlPrincipal.add(txfUser);
        pnlPrincipal.add(psfPass);
        pnlPrincipal.add(btnAceptar);
        pnlPrincipal.add(btnCancelar);
        pnlPrincipal.setBackground(Color.ORANGE);

        // Ventana principal
        setTitle("Identificación");
        setContentPane(pnlPrincipal);
        setSize(290, 240);
        setLocationRelativeTo(null);
//        setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    void procesarIdentificacion() {
        String userAct = txfUser.getText();
        char[] passAct = psfPass.getPassword();

        if (validarUsuario(userAct, passAct)) {
            JOptionPane.showMessageDialog(this, "Acceso PERMITIDO");
        } else {
            JOptionPane.showMessageDialog(this, "Acceso DENEGADO");
            txfUser.requestFocus();
        }
    }

    private boolean validarUsuario(String userAct, char[] passAct) {
        boolean encontradoOK = false;
        try {
            FileReader fr = new FileReader(FICHERO);
            BufferedReader br = new BufferedReader(fr);
            boolean finProcesoOK = false;
            do {
                String lineaActual = br.readLine();
                if (lineaActual != null) {
                    StringTokenizer st = new StringTokenizer(lineaActual, ",");
                    String userRef = st.nextToken();
                    char[] passRef = st.nextToken().toCharArray();
                    if (userAct.equals(userRef) && Arrays.equals(passAct, passRef)) {
                        encontradoOK = true;
                        finProcesoOK = true;
                    }
                } else {
                    finProcesoOK = true;
                }
            } while (!finProcesoOK);
        } catch (Exception e) {
            System.out.println("Error: " + e);
        }
        return encontradoOK;
    }
}
